FORM2/ ;		* * * * * * * * * * * * *
 ;		*  Program by Kim Watt  *
 ;		* Breeze Computing Inc. *
 ;		*     P.O. Box  1013    *
 ;		* Berkley, Mich.  48072 *
 ;		*    (313) 288-9422     *
 ;		* * * * * * * * * * * * *
 ;
 ;
 ;
 ;
 ;
 ;
 ;
 ;
 	ORG	6D00H
 ENTRY	DI
 ENTRY2	LD	SP,ENTRY
 	CALL	CREDIT		;SHOW AUTHOR CREDIT
 	CALL	GETDRV		;GET DESIRED DRIVES
 ONLY2	LD	IX,ONES
 	CALL	STATCK
 	LD	IX,ONES		;WHICH DRIVES TO FORMAT
 ONLYB	LD	IY,TRACKS	;# TRACKS ON DISK
 BAD88	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Enter diskette track count: '
 	DEFB	0
 	LD	B,2
 	CALL	GETSTR		;GET RESPONSE
 	JR	Z,BAD88		;USE 35
 	CALL	VALUE		;COMPUTE VALUE
 	LD	A,E		;GET VALUE
 RESUM2	LD	(IY),A		;SAVE TRACK COUNT
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Fill empty sectors with what byte ? '
 	DEFB	0
 	LD	B,2
 	CALL	GETSTR
 	JR	Z,FILE5
 	CALL	VALUE
 	LD	A,E
 	JR	DODO
 FILE5	LD	A,0
 DODO	LD	(FILBYT),A
 	LD	IX,ONES
 	CALL	STATCK
 	LD	IX,ONES
 GOMORE	XOR	A		;START WITH TRACK 0
 	LD	(TRAK),A	;SAVE FOR FORMAT
 	LD	A,(IX)		;WORKING DRIVE
 	CP	0FFH		;TERMINATOR ?
 	JP	Z,FMTBYE	;DONE WITH FORMATTING
 	CP	99		;NOT THIS ONE
 	JR	Z,SKIP1
 	LD	(DRIVE),A	;SAVE DRIVE
 	CALL	FORMAT
 SKIP1	INC	IX		;BUMP DRIVE POINTER
 	JR	GOMORE
 CREDIT	CALL	DISPLY
 	DEFW	1F1CH		;CLEAR SCREEN
 	DEFM	'- BREEZE DISK FORMATTER -'
 	DEFW	0D0DH
 	DEFM	'Program by Kim Watt'
 	DEFB	0DH
 	DEFM	'Breeze Computing Inc.'
 	DEFB	0DH
 	DEFM	'Version 1.3'
 	DEFB	0DH
 	DEFB	0DH
 	DEFB	0
 	RET			;DONE WITH CREDITS
 GETDRV	CALL	DISPLY
 	DEFM	'You may format any number of disks, any combination'
 	DEFW	0D0DH
 	DEFB	0
 	LD	A,1		;START WITH DRIVE 0
 	LD	C,0		;ACTUAL DRIVE
 	LD	B,4		;GO FOR 4 DRIVES
 	LD	IX,ONES		;WHICH DRIVES TO FORMAT
 GETLP	PUSH	BC
 	PUSH	AF
 	LD	A,C		;GET DRIVE
 	CALL	ASCII		;MAKE IT ASCII
 	LD	A,B		;GET LOW BYTE
 	LD	(WHDRIV),A	;SAVE INTO STRING
 BAD7	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Do you want to format Drive '
 WHDRIV	DEFM	'0 ? '
 	DEFB	0
 	LD	B,3
 	CALL	GETSTR
 	JR	Z,NONONO
 	CP	'Y'		;YES ?
 	JR	Z,OKYES
 	CP	'N'
 	JR	NZ,BAD7
 NONONO	LD	A,99
 	LD	(IX),A
 	JR	NEXT
 OKYES	POP	AF
 	LD	(IX),A
 	PUSH	AF
 NEXT	POP	AF
 	POP	BC
 	INC	IX
 	RLA			;SHIFT TO NEXT BIT
 	INC	C
 	DJNZ	GETLP
 	RET			;DONE
 ONES	DEFW	00H
 	DEFW	00H
 	DEFB	0FFH		;TERMINATOR
 STATCK	LD	A,(IX)		;GET A DRIVE BYTE
 	CP	0FFH		;TERMINATOR ?
 	RET	Z		;DONE
 	CP	99
 	JP	Z,NOCHK		;NOT THIS DRIVE
 	LD	(DRIVE),A	;PASS DRIVE
 	CALL	RESTOR
 	LD	BC,0
 	CALL	60H		;WAIT FOR MOTOR SPEED
 	CALL	SELECT		;RESELECT THE DRIVE
 	LD	A,(37ECH)	;GET STATUS BYTE
 	LD	HL,ERMSG5	;DRIVE NOT READY
 	BIT	7,A
 	JP	NZ,DERROR
 	LD	HL,ERMSG6	;DRIVE NOT IN SYSTEM
 	BIT	2,A
 	JP	Z,DERROR
 	LD	HL,ERMSG7	;DISKETTE WRITE PROTECTED
 	BIT	6,A
 	JP	NZ,DERROR
 	LD	B,00CDH
 	LD	HL,ERMSG8	;NO SYSTEM IN DRIVE
 TST1	DEC	BC
 	LD	A,B
 	OR	C		;ANY BITS ON STILL ?
 	JP	Z,DERROR
 	LD	A,(37ECH)
 	AND	2
 	JR	NZ,TST1
 	LD	BC,199DH
 	LD	HL,ERMSG9	;DOOR NOT CLOSED
 TST2	DEC	BC
 	LD	A,B
 	OR	C
 	JP	Z,DERROR
 	LD	A,(37ECH)
 	AND	2
 	JP	Z,TST2
 	LD	DE,0
 	LD	BC,00BAH
 	LD	HL,ERMSG0	;NO DISKETTE IN DRIVE
 TST3	DEC	BC
 	LD	A,B
 	OR	C
 	JP	Z,DERROR
 	INC	DE
 	LD	A,(37ECH)
 	AND	2
 	JR	NZ,TST3
 	LD	BC,1720H
 	LD	HL,ERMSG9	;DOOR NOT CLOSED
 TST4	DEC	BC
 	LD	A,B
 	OR	C
 	JP	Z,DERROR
 	INC	DE
 	LD	A,(37ECH)
 	AND	2
 	JR	Z,TST4
 	LD	HL,0EACBH
 	ADD	HL,DE
 	LD	HL,ERMSG1	;HARD SECTORED
 	JP	NC,DERROR
 NOCHK	INC	IX		;POINT TO NEXT BYTE
 	JP	STATCK		;GO AGAIN
 DISPLY	POP	DE		;POINT TO DATA
 DISLP	LD	HL,(4020H)	;GET CURSOR POSITION
 	LD	A,(DE)		;GET A BYTE
 	INC	DE		;POINT TO NEXT
 	OR	A		;SET FLAGS
 	JR	Z,DISDN		;TERMINATOR
 	CP	20H		;CHECK FOR CONTROL CODE
 	JR	C,DISCTL	;DISPLAY CONTROL CODE
 	LD	(HL),A		;DISPLAY BYTE
 	CP	(HL)		;STILL THERE ?
 	JR	Z,DISOK		;LOWER CASE INSTALLED
 	SUB	20H		;MAKE IT UPPER CASE
 	LD	(HL),A		;DISPLAY IT
 DISOK	INC	HL		;POINT TO NEXT
 	LD	(4020H),HL	;UPDATE CURSOR
 	JR	DISLP		;GET NEXT CHARACTER
 DISCTL	PUSH	DE		;MUST SAVE
 	PUSH	IY		;DE AND IY
 	CALL	33H		;DISPLAY CONTROL
 	POP	IY		;RESTORE
 	POP	DE		;DE AND IY
 	JR	DISLP		;GET SOME MORE
 DISDN	PUSH	DE		;RETURN ADDRESS
 	RET			;GO TO IT
 SELECT	DEFB	3EH		;LOAD A OPCODE
 DRIVE	DEFB	1		;DRIVE ONE
 	LD	(37E1H),A	;SELECT IT
 	RET
 ERMSG5	DEFB	0DH
 	DEFM	'Drive NOT READY !'
 	DEFB	0
 	JP	ERRORD
 ERMSGZ	DEFM	'BAD VERIFY !'
 	DEFB	0DH
 	DEFB	0
 	JP	VRTEST
 ERMSG6	DEFB	0DH
 	DEFM	'Drive NOT IN SYSTEM !'
 	DEFB	0
 	JP	ERRORD
 ERMSG7	DEFB	0DH
 	DEFM	'Diskette WRITE PROTECTED !'
 	DEFB	0
 	JP	ERRORD
 ERMSG8	DEFB	0DH
 	DEFM	'No SYSTEM in DRIVE !'
 	DEFB	0
 	JP	ERRORD
 ERMSG9	DEFB	0DH
 	DEFM	'DOOR NOT CLOSED on drive !'
 	DEFB	0
 	JP	ERRORD
 ERMSG0	DEFB	0DH
 	DEFM	'NO DISKETTE in drive !'
 	DEFB	0
 	JP	ERRORD
 ERMSG1	DEFB	0DH
 	DEFM	'Diskette is HARD SECTORED !'
 	DEFB	0
 	JP	ERRORD
 TRACKS	DEFB	0		;# OF TRACKS ON DISK
 DERROR	PUSH	HL		;STRING POINTER
 	JP	DISPLY		;GO DISPLAY
 ;  ALL ERROR ROUTINES END HERE
 ERRORD	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'FORMAT CANNOT CONTINUE because of detected ERROR !'
 	DEFB	0DH
 	DEFM	'Press <ENTER> to restart program ! '
 	DEFB	0
 	LD	B,1
 	CALL	GETSTR		;WAIT FOR ENTER KEY
 	JP	ENTRY2		;TERMINATE
 REQLEN	DEFB	0
 LENGTH	DEFB	0
 CHAR	DEFB	0
 NEWST	XOR	A		;ZERO THE LENGTH
 	LD	(LENGTH),A	;STASH IT
 	LD	HL,(4020H)	;START CURSOR POSIT
 	LD	A,(REQLEN)
 	LD	B,A
 	JR	GET15		;GO TO IT
 GETSTR	LD	HL,(4020H)	;GET CURSOR POSITION
 	LD	A,B		;GET REQUESTED LENGTH
 	LD	(REQLEN),A	;SAVE IT
 GET15	LD	(HL),20H	;PUT SPACES ON VIDEO
 	INC	HL		;POINT TO NEXT
 	DJNZ	GET15		;GO TILL END
 	XOR	A		;ZERO IT
 	LD	(LENGTH),A	;SAVE CURRENT LENGTH
 	LD	HL,STRING	;POINT TO INPUT BUFFER
 	LD	DE,(4020H)	;GET CURSOR
 SCAN	LD	A,176
 SCAN2	LD	(DE),A
 	LD	BC,500H
 	CALL	60H
 	PUSH	DE
 	PUSH	IY
 	CALL	2BH
 	POP	IY
 	POP	DE
 	OR	A
 	JR	NZ,GOTONE
 	LD	A,(DE)
 	CP	176
 	JR	NZ,SCAN
 	LD	A,20H
 	JR	SCAN2
 GOTONE	LD	(CHAR),A	;SAVE CHARACTER
 	CP	0DH		;ENTER KEY ?
 	JR	Z,DONEST	;TERMINATOR
 	CP	8		;BACKSPACE ?
 	JR	Z,BCKSPA
 	CP	18H		;SHIFT LEFT ARROW ?
 	JR	Z,NEWST		;START OVER
 	CP	31
 	JR	Z,NEWST
 	CP	20H		;DISPLAYABLE ?
 	JP	C,SCAN		;NOPE
 	LD	A,(REQLEN)	;GET REQUESTED LENGTH
 	LD	B,A		;SAVE IT HERE
 	LD	A,(LENGTH)	;GET ACTUAL LENGTH
 	CP	B
 	JR	NC,SCAN		;TOO MANY CHARACTERS
 	LD	A,(CHAR)	;GET CHARACTER BACK
 	LD	(DE),A		;PUT ON VIDEO
 	LD	(HL),A		;PUT INTO BUFFER
 	INC	DE
 	INC	HL		;BUMP POINTERS
 	LD	A,(LENGTH)	;GET LENGTH
 	INC	A		;ONE MORE
 	LD	(LENGTH),A	;SAVE NEW VALUE
 	JR	SCAN		;GO SOME MORE
 BCKSPA	LD	A,(LENGTH)	;GET LENGTH
 	OR	A		;SET FLAGS
 	JR	Z,SCAN		;NO CHARACTERS
 	DEC	A		;REDUCE NUMBER
 	LD	(LENGTH),A	;SAVE NEW LENGTH
 	LD	A,20H		;SPACE
 	LD	(DE),A
 	LD	(HL),A		;PUT INTO BUFFERS
 	DEC	HL
 	DEC	DE		;REDUCE POINTERS
 	JR	SCAN		;GO SOME MORE
 DONEST	LD	A,20H		;SPACE
 	LD	(DE),A		;CURSOR OFF
 	LD	(HL),0DH	;TERMINATOR
 	LD	A,(LENGTH)	;GET LENGTH
 	OR	A		;SET LENGTH FLAGS
 	LD	B,A		;GIVE TO B
 	LD	C,A		;HERE TO FOR BC=LENGTH
 	LD	A,(STRING)	;GET FIRST CHARACTER
 	LD	HL,STRING	;POINT TO INPUT
 	LD	(4020H),DE	;UPDATE CURSOR POSITION
 	RET			;DONE
 VALUE	LD	E,0		;PASS IN E REG.
 VALLP	LD	A,(HL)		;GET A BYTE FROM STRING
 	INC	HL		;POINT TO NEXT
 	CP	30H		;NUMERIC ?
 	RET	C		;NOPE
 	CP	3AH		;NUMERIC ?
 	RET	NC		;NOPE
 	SUB	30H		;REMOVE ASCII
 	LD	B,A
 	LD	A,E
 	ADD	A,A
 	ADD	A,A
 	ADD	A,E
 	ADD	A,A
 	ADD	A,B
 	LD	E,A
 	JR	VALLP		;GO SOME MORE
 ASCII	LD	C,30H		;START WITH 0
 ASCII1	SUB	0AH		;MINUS 10
 	JR	C,ASCII2
 	INC	C
 	JR	ASCII1
 ASCII2	ADD	A,3AH
 	LD	B,A
 	RET			;ASCII IN BC
 FMTBYE	CALL	DISPLY
 	DEFW	1F1CH		;CLEAR SCREEN
 	DEFM	'Formatting completed !'
 	DEFW	0D0DH
 	DEFM	'<E>xit program or <R>estart again ? '
 	DEFB	0
 	LD	B,1
 	CALL	GETSTR
 	CP	'R'		;RESTART ?
 	JP	Z,RSTART	;OK
 	CP	'E'		;EXIT ?
 	JR	NZ,FMTBYE	;BAD INPUT
 	CALL	DISPLY
 	DEFW	0D0DH
 	DEFM	'Format utility TERMINATED !'
 	DEFW	0D0DH
 	DEFM	'Press <ENTER> when SYSTEM disk mounted on drive 0 ! '
 	DEFB	0
 	LD	B,1
 	CALL	GETSTR
 	JP	402DH
 FORMAT	LD	A,(DRIVE)	;GET DRIVE
 	LD	C,0		;START WITH 0
 FMTLP1	RRCA			;SHIFT OUT A BIT
 	JR	C,DRVFND
 	INC	C		;BUMP DRIVE
 	JR	FMTLP1		;TEST AGAIN
 DRVFND	LD	A,C		;GET DRIVE
 	CALL	ASCII		;CONVERT TO ASCII
 	LD	A,B		;GET LOW NYBBLE
 	LD	(FMTDRV),A	;PUT INTO STRING
 	CALL	DISPLY
 	DEFW	1F1CH		;CLEAR SCREEN
 	DEFM	'- BREEZE FORMATTER -'
 	DEFW	0D0DH
 	DEFB	0
 	CALL	SELECT
 	LD	BC,0
 	CALL	60H
 	XOR	A
 	LD	(TRAK),A
 	LD	DE,ORDER
 FMTLP	LD	A,(TRAK)	;GET CURRENT TRACK
 	CALL	ASCII		;MAKE IT ASCII
 	LD	(FMTTR),BC	;PUT INTO STRING
 	CALL	DISPLY
 	DEFB	1DH		;BEGINNING OF LINE
 	DEFM	'Formatting Drive '
 FMTDRV	DEFM	'0, Track '
 FMTTR	DEFM	'00.'
 	DEFB	0
 GOFMT1	LD	A,0FBH
 	LD	(DATMRK),A	;SAVE INTO BUFFER
 	LD	HL,5200H	;TRACK BUFFER
 	LD	DE,ORDER	;SECTOR ORDER ON TRACK
 	LD	B,0EH
 	CALL	FILLFF		;POST INDEX GAP
 SECLP	LD	B,6
 	LD	C,0
 	CALL	FILL		;SYNC FIELD
 	LD	C,0FEH		;ID ADDRESS MARK
 	CALL	FILL1		;PUT INTO BUFFER
 	DEFB	0EH		;LOAD C OPCODE
 TRAK	DEFB	0		;FORMAT TRACK
 	CALL	FILL1
 	LD	C,1		;HEAD NUMBER
 ;  COULD BE 1 WITH DOUBLE SIDED DISKS
 	CALL	FILL1
 	LD	A,(DE)		;GET SECTOR
 	LD	C,A
 	CALL	FILL1
 	LD	C,2		;SECTOR LENGTH 256 BYTES
 	CALL	FILL1
 	LD	C,0F7H		;CRC GENERATOR
 	CALL	FILL1
 	LD	C,0FFH
 	CALL	FILL1
 	LD	B,0BH
 	CALL	FILLFF
 	LD	B,6
 	LD	C,0
 	CALL	FILL
 	DEFB	0EH		;LOAD C OPCODE
 DATMRK	DEFB	0		;DATA MARK TYPE
 	CALL	FILL1
 	LD	B,0
 	DEFB	0EH		;LOAD C OPCODE
 FILBYT	DEFB	0EEH		;FILL BYTE FOR EMPTY SECS
 	CALL	FILL		;FILL EMPTY SECTORS
 	LD	B,0
 	LD	A,(FILBYT)
 	LD	C,A
 	CALL	FILL
 CONTIN	LD	C,0F7H		;CRC GENERATOR
 	CALL	FILL1
 	LD	C,0FFH
 	CALL	FILL1
 	LD	B,0BH
 	CALL	FILLFF
 	INC	DE		;NEXT SECTOR
 	LD	A,(DE)		;GET BYTE
 	INC	A		;CHECK FOR FF TERMINATOR
 	JR	NZ,SECLP	;NEXT SECTOR
 	LD	B,0BH		;PRE-INDEX GAP
 	CALL	FILLFF
 	CALL	WRITTR		;WRITE TRACK
 NXTFMT	LD	A,(TRAK)	;GET CURRENT TRACK
 	INC	A		;NEXT
 	LD	(TRAK),A	;SAVE IT
 	CP	(IY)		;END ?
 	JP	Z,VERIFY	;VERIFY SECTORS
 	LD	A,5BH		;STEP IN BYTE
 	LD	(37ECH),A	;GIVE TO CONTROLLER
 	PUSH	AF
 	POP	AF
 	PUSH	AF
 	POP	AF
 STEPWT	LD	A,(37ECH)	;GET STATUS
 	RRCA			;SHIFT OUT BUSY BIT
 	JR	C,STEPWT	;WAIT TILL DONE
 	JP	FMTLP		;GO AGAIN
 WRITTR	CALL	TRWRIT		;TRY IT ONCE
 	RET	Z		;GOOD WRITE
 TRWRIT	CALL	SELECT		;SELECT DRIVE
 	LD	BC,5200H	;TRACK BUFFER
 	LD	HL,37ECH	;CONTROLLER ADDRESS
 	LD	(HL),0F4H	;WRITE TRACK BYTE
 	LD	DE,37EFH	;DATA TRANSFER ADDRESS
 	PUSH	BC
 	POP	BC
 	PUSH	BC
 	POP	BC
 	DI
 	JR	WRBZZ
 BZWRZ	RRCA
 	JR	NC,WRDNZ
 WRBZZ	LD	A,(HL)
 	BIT	1,A
 	JR	Z,BZWRZ
 	LD	A,(BC)		;GET A BYTE
 	LD	(DE),A		;GIVE TO DISK
 	INC	BC		;BUMP POINTER
 	JP	WRBZZ
 WRDNZ	LD	A,(HL)		;GET STATUS/CLEAR LATCH
 	LD	(HL),0D0H	;FORCE INTERRUPT
 	LD	HL,ERMSG2	;TRANSFER TOO FAST
 	BIT	2,A		;DATA LOST ?
 	JP	NZ,DERROR
 	LD	HL,0AE00H
 	ADD	HL,BC
 	EX	DE,HL
 	LD	HL,0F413H
 	ADD	HL,DE
 	LD	HL,ERMSG3
 	JP	NC,DERROR
 	LD	HL,0F397H
 	ADD	HL,DE
 	LD	HL,ERMSG4
 	JP	C,DERROR
 	RET			;EVERYTHING IS OK
 ERMSG2	DEFB	0DH
 	DEFM	'Can'
 	DEFB	27H
 	DEFM	't format.  Transfer rate TOO FAST !'
 	DEFB	0
 	JP	ERRORD
 ERMSG3	DEFB	0DH
 	DEFM	'Can'
 	DEFB	27H
 	DEFM	't format.  Motor speed TOO SLOW !'
 	DEFB	0
 	JP	ERRORD
 ERMSG4	DEFB	0DH
 	DEFM	'Can'
 	DEFB	27H
 	DEFM	't format.  Motor speed TOO FAST !'
 	DEFB	0
 	JP	ERRORD
 VERIFY	CALL	RESTOR
 	CALL	DISPLY
 	DEFW	0D0DH
 	DEFB	0
 	LD	DE,0
 VERLP	LD	A,D		;GET TRACK
 	CALL	ASCII
 	LD	(ASDR),BC	;PUT INTO STRING
 	LD	E,0		;START WITH SECTOR 0
 VERLP1	PUSH	DE		;SAVE TRACK SECTOR
 	CALL	SELECT		;SELECT DRIVE
 	LD	A,E		;GET SECTOR
 	CALL	ASCII
 	LD	A,B
 	LD	(ASSC),A
 	CALL	DISPLY
 	DEFB	1DH
 	DEFM	'Verifying Track '
 ASDR	DEFM	'00, Sector '
 ASSC	DEFM	'0.'
 	DEFB	0
 	POP	DE		;RESTORE TRACK/SECTOR
 	LD	BC,5D00H	;BUFFER
 	CALL	READ		;READ SECTOR
 	LD	HL,ERMSGZ
 	BIT	4,A
 	JP	NZ,VERTST
 	LD	HL,ERMSGZ
 	BIT	3,A
 	JP	NZ,VERTST
 	LD	HL,ERMSGZ
 	BIT	2,A
 	JP	NZ,VERTST
 	INC	E		;ADVANCE SECTOR
 	LD	A,E
 	CP	5
 	JP	NZ,VERLP1	;CONTINUE
 VERNO	INC	D		;BUMP TRACK
 	LD	A,(TRACKS)
 	CP	D
 	JP	NZ,VERLP
 	JP	FMTBYE
 VERTST	PUSH	DE
 	LD	HL,ERMSGZ
 	PUSH	HL
 	JP	DISPLY
 VRTEST	POP	DE
 	JP	VERNO
 RESTOR	CALL	SELECT		;SELECT DRIVE
 	LD	A,0BH
 	LD	(37ECH),A
 	PUSH	AF
 	POP	AF
 	PUSH	AF
 	POP	AF
 RESLP	CALL	SELECT
 	LD	A,(37ECH)
 	RRCA
 	JR	C,RESLP
 	RET			;DONE WITH RESTORE
 ;  ORDER THAT SECTORS APPEAR ON TRACK
 ORDER	DEFB	0
 	DEFB	3
 	DEFB	1
 	DEFB	4
 	DEFB	2
 	DEFB	0FFH
 FILLFF	LD	C,0FFH
 FILL	CALL	FILL1
 	DJNZ	FILL
 	RET
 FILL1	LD	(HL),C
 	INC	HL
 	RET
 READ	PUSH	BC
 	LD	A,88H
 	CALL	R2
 	POP	HL
 	RET	Z
 	LD	B,H
 	LD	C,L
 	LD	A,80H
 R2	LD	(RDTYPE+1),A
 	LD	(37EEH),DE
 	LD	HL,37ECH
 	LD	(HL),1BH
 	PUSH	AF
 	POP	AF
 	PUSH	AF
 	POP	AF
 R1	CALL	SELECT
 	LD	A,(HL)
 	RRCA
 	JR	C,R1
 RDTYPE	LD	(HL),88H
 	PUSH	DE
 	LD	DE,37EFH
 	PUSH	BC
 	POP	BC
 	JR	R5
 R3	RRCA
 	JR	NC,R6
 R4	LD	A,(HL)
 	BIT	1,A
 	JR	Z,R3
 	LD	A,(DE)
 	LD	(BC),A
 	INC	BC
 R5	JR	R4
 R6	LD	A,(HL)
 	AND	1CH
 	POP	DE
 	RET	Z
 	LD	(HL),0D0H
 	RET
 RSTART	CALL	DISPLY
 	DEFW	0D0DH
 	DEFM	'<S>ame parameters, or <N>ew ones ? '
 	DEFB	0
 	LD	B,1
 	CALL	GETSTR
 	CP	'N'
 	JP	Z,ENTRY
 	CP	'S'
 	JR	NZ,RSTART
 	LD	IX,ONES
 	CALL	DISPLY
 	DEFW	0D0DH
 	DEFM	'Press <ENTER> when disks are mounted ! '
 	DEFB	0
 	LD	B,1
 	CALL	GETSTR
 	CALL	STATCK		;CHECK STATUS NEW DISKS
 	LD	IX,ONES		;RESET POINTER
 	JP	GOMORE
 STRING	DEFS	80H		;INPUT BUFFER
 SPECL	LD	C,A
 	CALL	FILL1
 	LD	C,2
 	CALL	FILL1
 	LD	C,0F7H
 	CALL	FILL1
 	LD	C,0FFH
 	CALL	FILL1
 	LD	B,0BH
 	CALL	FILLFF
 	LD	B,6
 	LD	C,0
 	CALL	FILL
 	LD	A,(DATMRK)
 	LD	C,A
 	CALL	FILL1
 	LD	B,32
 	LD	A,(FILBYT)
 	LD	C,A
 	CALL	FILL
 	JP	CONTIN
 	END	ENTRY
FH
 	CALL	FILL1
 	LD	B,0BH
 	CALL	FILLFF
 	LD	B,6
 	LD	C,0
 	CALL	FILL
 	LD	A,(DATMRK)
 	LD	C,A
 	CALL	FILL1
 	LD	B,32
 	LD	A,(FILBYT)
 	